package com.lhkj.ct.meta.admin.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lhkj.ct.meta.admin.mapper.SysUserRoleMapper;
import com.lhkj.ct.meta.admin.model.entity.TblUserRole;
import com.lhkj.ct.meta.admin.service.UserRoleService;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * <p>
 * 用户和角色关联表 服务实现类
 * </p>
 *
 * @author jobob
 * @since 2023-09-04
 */
@Service
public class UserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, TblUserRole> implements UserRoleService {

    @Override
    public boolean saveUserRoles(String userId, List<String> roleIds) {
        if (userId == null || CollectionUtil.isEmpty(roleIds)) {
            return false;
        }
        getBaseMapper().delete(new LambdaQueryWrapper<TblUserRole>().eq(TblUserRole::getUserId, userId));
        Set<TblUserRole> userRoles = roleIds.stream().map(r -> new TblUserRole(userId, r)).collect(Collectors.toSet());
        return saveBatch(userRoles);
//        // 用户原角色ID集合
//        List<String> userRoleIds = this.list(new LambdaQueryWrapper<TblUserRole>()
//                .eq(TblUserRole::getUserId, userId))
//                .stream()
//                .map(TblUserRole::getRoleId)
//                .collect(Collectors.toList());
//
//        // 新增用户角色
//        List<String> saveRoleIds;
//        if (CollectionUtil.isEmpty(userRoleIds)) {
//            saveRoleIds = roleIds;
//        } else {
//            saveRoleIds = roleIds.stream()
//                    .filter(roleId -> !userRoleIds.contains(roleId))
//                    .collect(Collectors.toList());
//        }
//
//        List<TblUserRole> saveUserRoles = saveRoleIds
//                .stream()
//                .map(roleId -> new TblUserRole(userId, roleId))
//                .collect(Collectors.toList());
//        this.saveBatch(saveUserRoles);
//
//        // 删除用户角色
//        if (CollectionUtil.isNotEmpty(userRoleIds)) {
//            List<String> removeRoleIds = userRoleIds.stream()
//                    .filter(roleId -> !roleIds.contains(roleId))
//                    .collect(Collectors.toList());
//
//            if (CollectionUtil.isNotEmpty(removeRoleIds)) {
//                this.remove(new LambdaQueryWrapper<TblUserRole>()
//                        .eq(TblUserRole::getUserId, userId)
//                        .in(TblUserRole::getRoleId, removeRoleIds)
//                );
//            }
//        }
//        return true;
    }

    @Override
    public List<String> selectRoleIdsByUser(String userId) {
        return getBaseMapper().selectRoleIdsByUser(userId);
    }
}
